/*给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。
*
* 输入: nums = [0,1]
* 输出: 2
* 说明: [0, 1] 是具有相同数量0和1的最长连续子数组
* */

package Leetcode;

import java.util.HashMap;

public class leetcode525 {

    public static void main(String[] args) {

        leetcode525 obj = new leetcode525();
        int[] nums = {0, 0, 1, 0, 0, 0, 1, 1};
        System.out.println(obj.findMaxLength(nums));
    }

    public int findMaxLength(int[] nums){

        HashMap<Integer, Integer> map = new HashMap<>();
        int n = nums.length;
        int sum = 0, maxLen = 0;
        map.put(sum, -1);
        for (int i = 0;i < n;i++){
            if (nums[i] == 1){
                sum++;
            }else {
                sum--;
            }
            if (map.containsKey(sum)){
                int index = map.get(sum);
                maxLen = (i - index) > maxLen ? (i - index):maxLen;
            }else {
                map.put(sum, i);
            }
        }
        return maxLen;
    }
}
